'''
1、什么是正则表达式   编写一些规范查找字符串
2、正在表达式是由什么构成  原义字符和元字符 如字符串'abc123'查找数字 原义字符则是123  元字符是\d
3、python怎么解析正则表达式
——元字符
.点:匹配除“\n”和"\r"之外的任何单个字符、汉字、字母、符号、数字
/d：匹配任意单个数字
——限定符
+加：至少匹配一次
*：匹配0次或多次
？：最多匹配一次
match：只在字符串开始位置匹配
search：在字符串的任意位置进行匹配，只会返回第一个匹配的字符串
findall：不断的search，返回到列表中
finditer：匹配所有的迭代器
4、python使用场景
——参数化
——查找一些特殊字符：邮箱、手机号、身份证
'''
import re
from common.public.get_data import GetData
target = '{"mobilephone":"#normal_user#","pwd":"#normal_pwd#"}'
p = "normal_user"#原义字符查找
p2 = "#(.*?)#"#圆括号代表正则表达式里面组的概念
#search 和 group查找到第一个匹配的表达式就返回
m = re.search(p2,target) #在目标字符串里面根据正则表达式来查找，有匹配的字符串就返回对象
print(m)
print(m.group())#不传参返回表达式和匹配的字符串
print(m.group(1))#传参就只返回匹配的字符串，也就是当前组匹配的字符串

#findall 查找到所有匹配的表达式后返回，返回的是列表
mm = re.findall(p2,target)
print(mm)

target2 = re.sub(p2,"123344",target,count=1)
print(target2)

while re.search(p2,target):#在字符串中查找匹配表达式的字符串，找到则返回一个对象 结果为True
    m = re.search(p2, target)  # 在目标字符串里面根据正则表达式来查找，有匹配的字符串就返回对象
    key = m.group(1)#拿到当前组匹配的字符串
    value = getattr(GetData,key)#拿到当前匹配字符串的值
    target = re.sub(p2,value,target,count=1)#替换目标字符串中的数据
print(target)